# -*- coding: utf-8 -*-

class Mymeta(type):
    def __call__(cls, *args, **kwargs):
        # self=Teacher这个类,args=('大海',18,'man'),kwargs={}
        print(cls, args, kwargs)
        # 1. 先产生一个空对象__new__可以给Teacher这个类创建一个空对象
        tea_obj = cls.__new__(cls)
        # 2. 执行__init__方法,完成对象的初始属性操作
        cls.__init__(tea_obj, *args, **kwargs)
        # 3. 返回初始化好的那个对象
        return tea_obj

# 设置函数
def __init__(self, a):
    self.a = a
Mymeta('Teacher',(object, ),{'__init__': __init__})(1)
# 推理:如果一切皆对象,那么Teacher也是一个对象,
# 该对象之所可以调用,肯定是这个对象的类Mymeta中也定义了一个函数__call__